package com.mazaiting.generator.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.mazaiting.common.core.domain.result.Option;
import com.mazaiting.common.core.ex.exceptions.BusinessException;
import com.mazaiting.common.core.ex.exceptions.EmptyObjectException;
import com.mazaiting.generator.domain.entity.TemplateGroupEntity;
import com.mazaiting.generator.domain.form.TemplateGroupForm;
import com.mazaiting.generator.domain.query.TemplateGroupQuery;
import com.mazaiting.generator.domain.vo.TemplateGroupVO;
import com.mazaiting.mybatisplus.domain.vo.BasePageVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 模板组
 *
 * @author mazaiting
 * @datetime 2022-11-11 23:11:59
 */
public interface ITemplateGroupService extends IService<TemplateGroupEntity> {

    /**
     * 分页数据
     *
     * @param templateGroupQuery 查询对象
     * @return 分页查询数据
     */
    BasePageVO<TemplateGroupVO> page(TemplateGroupQuery templateGroupQuery);

    /**
     * 新增数据
     *
     * @param templateGroupForm 表单数据
     * @return true: 新增成功; false: 新增失败
     */
    @Transactional(rollbackFor = Exception.class)
    boolean save(TemplateGroupForm templateGroupForm);

    /**
     * 更新数据
     *
     * @param templateGroupForm 表单数据
     * @return true: 更新成功; false: 更新失败
     */
    @Transactional(rollbackFor = Exception.class)
    boolean update(TemplateGroupForm templateGroupForm);

    /**
     * 删除数据
     *
     * @param ids ID 列表
     * @return true: 删除成功; false: 删除失败
     */
    @Transactional(rollbackFor = Exception.class)
    boolean deleteByIds(String ids);

    /**
     * 根据 ID 获取信息
     *
     * @param id ID
     * @return 信息
     */
    TemplateGroupVO getInfoById(Long id) throws EmptyObjectException;

    /**
     * 模板组下拉列表
     *
     * @return 模板组下拉列表
     */
    List<Option<Long>> listOptions() throws BusinessException;

}